#include"SList.h"


//int removeElement(int* nums, int numsSize, int val)
//{
//	int n = numsSize;
//	int i = 0;
//	int j = 0;
//	for (i = 0; i < n; i++)
//	{
//		if (nums[i] != val)
//		{
//			nums[j] = nums[i];
//			j++;
//		}
//	}
//	return j;
//}
//
//int removeDuplicates(int* nums, int numsSize)
//{
//	int n = numsSize;
//	int i = 0;
//	int j = 0;
//	int k = 0;
//	while (i<n)
//	{
//		if (nums[i] != nums[j])
//		{
//			k++;
//			nums[k] = nums[i];
//			j = i;
//		}
//		i++;
//	}
//	return k + 1;
//}
//
//
//void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) 
//{
//	int arr[20] = { 0 };
//	int i = 0;
//	int j = 0;
//	int k = 0;
//	while (i<m&&j<n)
//	{
//		if (nums1[i] < nums2[j])
//		{
//			arr[k] = nums1[i];
//			k++;
//			i++;
//		}
//		else
//		{
//			arr[k] = nums2[j];
//			k++;
//			j++;
//		}
//	}
//	if (i == m)
//	{
//		while (j < n)
//		{
//			arr[k] = nums2[j];
//			k++;
//			j++;
//		}
//	}
//	else if (j == n)
//	{
//		while (i < m)
//		{
//			arr[k] = nums1[i];
//			k++;
//			i++;
//		}
//	}
//	memcpy(nums1, arr, sizeof(int) * (m + n));
//}

//void test1()
//{
//	SListNode* phead = NULL;
//	/*SListPushBack(&phead, 1);
//	SListPushBack(&phead, 2);
//	SListPushBack(&phead, 3);
//	SListPrint(phead);*/
//
//	/*SListPushFront(&phead, 1);
//	SListPushFront(&phead, 2);
//	SListPushFront(&phead, 3);
//	SListPushFront(&phead, 4);
//	SListPushFront(&phead, 5);
//	SListPrint(phead);
//	SListPopBack(&phead);
//	SListPrint(phead);
//
//	SListPopBack(&phead);
//	SListPrint(phead);
//
//	SListPopBack(&phead);
//	SListPopBack(&phead);
//	SListPopBack(&phead);
//	SListPrint(phead);*/
//
//	SListPushFront(&phead, 1);
//	SListPushFront(&phead, 2);
//	SListPushFront(&phead, 3);
//	SListPushFront(&phead, 4);
//	SListPushFront(&phead, 5);
//	SListPrint(phead);
//	SListPopFront(&phead);
//	SListPrint(phead);
//
//	SListPopFront(&phead);
//	SListPrint(phead);
//
//	SListPopFront(&phead);
//	SListPopFront(&phead);
//	SListPopFront(&phead);
//	//SListPopFront(&phead);
//
//	SListPrint(phead);
//
//}
//void test2()
//{
//	SListNode* phead = NULL;
//	SListPushFront(&phead, 1);
//	SListPushFront(&phead, 2);
//	SListPushFront(&phead, 3);
//	SListPushFront(&phead, 4);
//	SListPushFront(&phead, 5);
//	SListPrint(phead);
//	/*for (int i = 1; i <= 5; i++)
//	{
//		SListNode*ret=SListFind(phead, i);
//		SListInsertAfter(ret, 13);
//		SListPrint(phead);
//		SListEraseAfter(ret);
//		SListPrint(phead);
//	}*/
//	//printf("%p\n", ret);
//	
//	SListNode* ret = SListFind(phead, 3);
//	SListEraseAfter(ret);
//
//
//	SListPrint(phead);
//	SListDestroy(phead);
//}

struct ListNode
{
	int val;
	struct ListNode* next;
};
//struct ListNode* valPre(struct ListNode* head, int val)
//{
//	struct ListNode* pre = NULL;
//	struct ListNode* cur = head;
//	
//	while()
//}

struct ListNode* removeElements(struct ListNode* head, int val)
{
	if (head == NULL)
	{
		return head;
	}
	struct ListNode* cur = head;
	struct ListNode* pre = NULL;
	struct ListNode* newhead = head;
	while (cur!=NULL)
	{
		if (cur->val != val)
		{
			if (pre == NULL)
			{
				newhead = cur;
			}
			pre = cur;
			cur = cur->next;
		}
		else
		{
			if (pre == NULL)
			{
				pre = cur->next;
				free(cur);
				cur = pre;
				pre = NULL;
			}
			else
			{
				pre->next = cur->next;
				free(cur);
				cur = pre->next;
			}
		}
	}
	return newhead;
}


struct ListNode* reverseList(struct ListNode* head)
{
	struct ListNode* n1 = NULL;
	struct ListNode* n2 = head;
	struct ListNode* n3 = NULL;
	if (n2 != NULL)
	{
		n3 = n2->next;
	}
	while (n2 != NULL)
	{
		n2->next = n1;
		n1 = n2;
		n2 = n3;
		if (n3 != NULL)
			n3 = n3->next;
	}
	return n1;
}

void test3()
{



}

int main()
{
	//test1();
	//test2();
	test3();
	return 0;
}
